/**
 * 类名：XmlParser
 * @author hmb
 * 创建日期： 2014-10-1 上午12:47:18
 *
 * 备注：基于Jsoup生成和解析XMl文档.
 * 		实际上Jsoup是为解析html而开发，不是很适合解析xml,
 * 		xml更适合用dom4j解析，但这两个库有太多相同类名，易造成冲突。
 * 		考虑到本项目更加倾向于html解析，故只使用了jsoup库。
 * 
 */
package com.erms.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;

import com.erms.util.http.XmlDocument;
import com.erms.util.http.XmlParserHandler;

/**
 * @author hmb
 *
 */
public class XmlParser implements XmlDocument {

	/**
	 * @see com.erms.util.http.XmlDocument#parse(java.lang.String, com.erms.util.http.XmlParserHandler)
	 */
	@Override
	public <T> List<T> parse(String data, XmlParserHandler<T> handler) {

		// TODO 自动生成的方法存根
		Document document = Jsoup.parse(data.toLowerCase(),"",Parser.xmlParser());
		if (document == null) {
			handler.onError();
			LogUtil.error(getClass(),"parse：error");
			return new ArrayList<>();
		}
		if (handler != null) {
			
			return handler.onParse(document);
		}
		return new ArrayList<>();
	}

	/**
	 * @see com.erms.util.http.XmlDocument#parseFromFile(java.lang.String, com.erms.util.http.XmlParserHandler)
	 */
	@Override
	public <T> List<T> parseFromFile(String fileName, XmlParserHandler<T> handler) {

		// TODO 自动生成的方法存根
		try {
			Document document = Jsoup.parse(new File(fileName), "utf-8", "");
			return handler.onParse(document);
		} catch (IOException e) {
			LogUtil.error(getClass(),"parseFromFile：IOException",e);
		}
		return new ArrayList<>();
	}

	/**
	 * @see com.erms.util.http.XmlDocument#save(java.lang.String, java.lang.String)
	 */
	@Override
	public void save(String fileName, String data) {

		// TODO 自动生成的方法存根
		FileOutputStream fos = null;
		try {
			File file = new File(fileName);
			if (!file.exists()) {
				//file.mkdirs();
				file.createNewFile();
			}
			fos = new FileOutputStream(file);
			fos.write(data.getBytes("utf-8"));
			fos.flush();
		} catch (IOException e) {
			LogUtil.error(getClass(),"save：IOException",e);
		}finally{
			try {
				if (fos!=null) {
					fos.close();
				}
			} catch (IOException e) {
				LogUtil.error(getClass(),"save：IOException",e);
			}

		}
	}

}
